package cn.zswltech.gruul.api;


import cn.zswltech.gruul.common.dal.query.LoginQuery;
import cn.zswltech.gruul.common.entity.DisplayMenuTreeDO;
import cn.zswltech.gruul.common.entity.UserDO;
import cn.zswltech.gruul.common.result.Response;
import org.springframework.web.bind.annotation.*;

import java.util.*;


/**
 * @author Jim
 * @version 1.0.0
 * @descripition:
 * @date 2024/1/29 13:15
 */
//@FeignClient("gruul")
public interface LoginApi {

    @PostMapping("/user/logout")
    Response userLogout();

    @PostMapping("/user/getAuthCode")
    Response getAuthCode(LoginQuery query);

    @PostMapping("/user/login")
    Response userLogin(LoginQuery query);

    @PostMapping("/user/todo/ssoLogin")
    Response todoSSOLogin(@RequestParam(name = "ticket", required = false) String ticket,
                          @RequestParam(name = "redirectUrl", required = false) String redirectUrl);

    /**
     * 交投门户系统 到 智慧风控 免密登录
     * ticket 是 门户系统 跳转到 前端 /user/ssoLogin地址会带上的
     * service /user/ssoLogin 的完整 url encoding
     */
    @PostMapping("user/portal/ssoLogin")
    Response portalSsoLogin(@RequestParam(name = "ticket", required = false) String ticket,
                            @RequestParam(name = "service", required = false) String service);

    /**
     * 经分大屏 到 智慧风控 免密登录
     * ticket和orgToken 是 经分大屏 跳转到 前端 /user/dashboardSSOLogin地址会带上的
     * 访问集团接口用ticket和orgToken换用户信息，经过权限校验后，进行内部登录，并引导前端跳转至看板页面
     */
    @PostMapping("user/dashboard/ssoLogin")
    Response<Map> dashboardSSOLogin(@RequestParam(name = "ticket", required = false) String ticket);

    /**
     * 集团 到 驾驶舱h5手机端页面 免密登录
     * ticket和orgToken 是 集团 跳转到 前端 /user/h5CockpitSSOLogin地址会带上的
     * 访问集团接口用ticket和orgToken换用户信息，经过权限校验后，进行内部登录，校验权限后引导前端跳转至驾驶舱页面
     * 兼容集团APP端两种参数名形式，多次发生变更
     */
    @PostMapping("user/h5Cockpit/ssoLogin")
    Response<Map> h5SSOLogin(@RequestParam(name = "loginId", required = false) String loginId);

    @GetMapping("/user/menuTree")
    Response<DisplayMenuTreeDO> menuTree();

    /**
     * 对外提供用户检查服务
     *
     * @param tokenId
     * @param servletPath
     * @param method
     * @param paramJson   参数
     * @return
     */
    @PostMapping("/user/checkUser")
    Response<UserDO> checkUser(String tokenId, String servletPath, String functionCode, String method, String paramJson);

    /**
     * 对外提供用户检查服务
     *
     * @return
     */
    @PostMapping("/user/checkToken")
    Response<Map<String, Object>> checkToken();

    /**
     * 查询图形验证码
     */
    @GetMapping("/user/authCode")
    Response doAuthCode();
}
